<?php

/**
 * E-mail/SMS alapú értesítések támogatása
 *
 * @author ironhawk,poli
 */
class SiteAlertHandler extends AlertHandler {

	/**
	 * Adott egy adag SiteUser id. Ez a metódus meg felnyalja őket userként úgy, hogy
	 * elnyeli az esetleges exception-t, és akkor üres tömböt ad, meg logol / küld mail-t, stb.
	 *
	 * @param $userIds
	 * @return array user részletességű SiteUser objektumok tömbje
	 */
	private static function readUsers($userIds) {

		if(empty($userIds)) return array();
			
		try {
			$filter = new DBQueryFilter();
			$filter->addComponent('id', DBQueryFilter::OP_IN, $userIds);
			$filter->addComponent('deleted_at', DBQueryFilter::OP_EQUALS, null);

			$users = SiteUser::getObjects($filter, null, null, 0);

		} catch (Exception $e) {
			$msg = "failed to read up users ids=".FunctionLibrary::arrayToString($userIds)." due to exception, alerting failed for these users! Exception: ".Log::getExceptionInfo($e);
			Log::error($msg);
			MailHelper::sendAdminMail("SiteAlertHandler error", $msg);

			$users = array();
		}

		return $users;
	}


	/**
	 * Adott egy adag SiteUser (minimum User részletességgel!). Ez csinál belőlük AlertRecipient tömböt!
	 *
	 * @param array $users SiteUSer objektumok tömbje
	 * @return array AlertRecipient objektumok tömbje
	 */
	public static function createEmailRecipients($users) {
		$recipients = array();

		if(!empty($users)) {
			if (is_array($users)) {
				foreach($users as $user) {
					array_push($recipients, $user->toEmailAlertRecipient());
				}
			} else {
				$recipients[] = $users;
			}
		}

		return $recipients;
	}


	/**
	 * Az adott user, fontosabb mezőit hozzáadja a változókhoz, amik a sablonok parse-olásánál jönnek
	 * képbe.
	 *
	 * @param array $variableArray ehhez az asszociatív tömbhöz adja hozzá őket, helyben!!!
	 * @param SiteUser $userObj a user objektum
	 */
	public static function addUserVariables(&$variableArray, $userObj, $prefix = '') {
		$variableArray[$prefix."_loginName"] = $userObj->getLoginName();
		// $variableArray[$prefix.'_viewPageUrl'] = $userObj->getViewUrl();
		$variableArray[$prefix."_name"] = $userObj->getRealName();
	}

	/**
	 * A sablonok parse-olásához ez a metódus állítja össze egységesen a globális értékek
	 * tömbjét. Aztán majd ehhez kerülhetnek még hozzá továbbiak...
	 *
	 * @return array asszoc. tömb, benne azon változók, amik tutira vannak globális szinten
	 */
	public static function getGlobalVariables() {
		$vars = array(
				"siteUrl" => ContentUrlManager::getSiteUrl(SiteHandler::getCurrentSiteId(), "full"),
				"siteName" => SiteHandler::getCurrentSite()->name,
		);
			
		return $vars;
	}

	/**
	 * Kiküld egy e-mail alert-et.
	 *
	 * @param string $templatePath az e-mail template fájlneve - relatívan a /sharedTemplates/emails folderhez!
	 * @param array $recipients AlertRecipient objektumok tömbje
	 * @param array $globalVariables asszociatív tömb, ezeket berámolja minden betöltött nyelvi változatba rögtön
	 */
	public static function sendEmailAlert($templatePath, $recipients, $globalVariables) {
			
		$siteObj = SiteHandler::getCurrentSite();
		$subjectPrefix = $siteObj->name . ": ";
			
		// TODO: itt kell megcsinálni, ha az adott site-ban más layout kell, akkor a mail is más style-t kapjon!
		$stylesPostfix = null;
			
		parent::sendEmailAlert($templatePath, $recipients, $globalVariables, $subjectPrefix, $stylesPostfix, SITE_MAIL_FROM, SITE_MAIL_REPLYTO);
	}

}